package com.mapper;

import com.baseEnum.CourseType;
import com.entity.SelectCourse;
import com.entity.Student;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * linjie.jin
 * Created by admin on 2016/1/7.
 */
public interface StudentMapper {

    /**
     * 学生根据自己的学号查询自己的课表
     * @param stuNo
     * @return
     * @author linjie.jin
     */
    SelectCourse selectCourseTable(String stuNo);

    /**
     * 选课列表
     * @param courseType
     * @return
     * @author linjie.jin
     */
    List<Map> selectCourse(@Param("courseType") CourseType courseType);

    /**
     * 选课列表的总条数
     * @param courseType
     * @return
     * @author linjie.jin
     */
    Long selectNum(@Param("courseType") CourseType courseType);

    /**
     *选课相信信息
     * @param id
     * @return
     * @author linjie.jin
     */
    List<Map> getDetailCourse(Integer id);

    /**
     * 查询学生某门课的选课次数
     * @param courseNo
     * @param stuNo
     * @return
     * @author linjie.jin
     */
    Long getCourseNoCount(@Param("courseNo") String courseNo, @Param("stuNo") String stuNo);

    /**
     * 保存学生所选的课程
     * @param selectCourse
     * @return
     * @author linjie.jin
     */
    int insert(SelectCourse selectCourse);

    /**
     * 查询学生的每门课的分数
     * @return
     * @author linjie.jin
     */
    List<Map> selectGrade(String stuNo);

    /**
     * 查询所有学生信息
     *
     * @return
     */
    List<Map> selectAllStuInfo();

    /**
     * 根据课程类型和学号查询课程数量
     *
     * @param stuNo      学号
     * @param courseType 课程类型
     * @return
     * @author foshou.zhang
     */
    Long selectCourseCount(@Param("stuNo") String stuNo, @Param("courseType") CourseType courseType);

    /**
     * 查询该所有学生专业对应相关信息
     *
     * @return
     * @Author ri.yang
     */
    List<Map<String, Object>> selectAllCredit();

    /**
     * 通过学号查询该学生的课程对应的考分
     *
     * @param stuNo
     * @return
     * @Author ri.yang
     */
    List<Map<String, Object>> findByStuNo(String stuNo);

    /**
     * 通过学号获取总学分
     *
     * @param stuNo
     * @return
     * @Author ri.yang
     */
    List<Integer> getTotalCredit(String stuNo);

    /**
     * 通过学号获取学生专业学分
     *
     * @param stuNo
     * @return
     * @Author ri.yang
     */
    BigDecimal getStuCredit(String stuNo);

    /**
     * 更新学生的总学分
     *
     * @param stuNo  学号
     * @param credit 学分
     * @return
     * @Author ri.yang
     */
    int updateCredit(@Param("stuNo") String stuNo, @Param("score") BigDecimal credit);

    /**
     * 更新学生信息
     *
     * @param student 学生
     * @Author foshou.zhang
     */
    void updateByEntity(Student student);

    /**
     * 通过学号查询学生信息
     *
     * @param stuNo
     * @return
     */
    Student getByStuId(String stuNo);
}
